#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
基金净值查询API使用示例

这个文件展示了如何使用FundNavAPI类来查询基金历史净值数据。
"""

import sys
import os

# 添加当前目录到Python路径
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, current_dir)

# 导入API类
from fund_nav_scraper import FundNavAPI
from config import get_database_config


def main():
    """API使用示例"""
    print("=== 基金净值查询API使用示例 ===\n")
    
    # 1. 初始化API
    print("1. 初始化API...")
    api = FundNavAPI()
    print("API初始化完成\n")
    
    # 2. 获取API信息
    print("2. 获取API信息...")
    api_info = api.get_api_info()
    print(f"API名称: {api_info['api_name']}")
    print(f"版本: {api_info['version']}")
    print(f"描述: {api_info['description']}")
    print(f"支持的字段: {', '.join(api_info['supported_fields'])}")
    print()
    
    # 3. 获取统计信息
    print("3. 获取数据库统计信息...")
    stats = api.get_fund_nav_statistics()
    if stats.get('success'):
        stats_data = stats['statistics']
        print(f"总记录数: {stats_data['total_records']:,}")
        print(f"基金总数: {stats_data['total_funds']:,}")
        print(f"数据日期范围: {stats_data['earliest_date']} 到 {stats_data['latest_date']}")
        print(f"平均单位净值: {stats_data['avg_unit_nav']:.4f}")
        print(f"净值范围: {stats_data['min_unit_nav']} - {stats_data['max_unit_nav']}")
    else:
        print(f"获取统计信息失败: {stats.get('error')}")
    print()
    
    # 4. 查询最新的5条净值记录
    print("4. 查询最新的5条净值记录...")
    recent_data = api.get_fund_nav_history(page_size=5, order_by='nav_date', order_direction='DESC')
    if recent_data.get('success'):
        print(f"查询成功，共{len(recent_data['data'])}条记录:")
        for i, record in enumerate(recent_data['data'], 1):
            print(f"  {i}. 基金代码: {record['fund_code']}, "
                  f"日期: {record['nav_date']}, "
                  f"单位净值: {record['unit_nav']}, "
                  f"累计净值: {record['accumulated_nav']}")
    else:
        print(f"查询失败: {recent_data.get('error')}")
    print()
    
    # 5. 查询特定基金的历史数据
    if recent_data.get('success') and recent_data.get('data'):
        test_fund_code = recent_data['data'][0]['fund_code']
        print(f"5. 查询基金 {test_fund_code} 的最近10条记录...")
        fund_data = api.get_fund_nav_by_code(test_fund_code, limit=10)
        if fund_data.get('success'):
            print(f"查询成功，共{len(fund_data['data'])}条记录:")
            for i, record in enumerate(fund_data['data'][:3], 1):  # 只显示前3条
                print(f"  {i}. 日期: {record['nav_date']}, "
                      f"单位净值: {record['unit_nav']}, "
                      f"日增长率: {record['daily_growth_rate'] or 'N/A'}")
        else:
            print(f"查询失败: {fund_data.get('error')}")
        print()
        
        # 6. 按日期范围查询
        print(f"6. 查询基金 {test_fund_code} 最近7天的数据...")
        from datetime import datetime, timedelta
        end_date = datetime.now().strftime('%Y-%m-%d')
        start_date = (datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d')
        
        date_range_data = api.get_fund_nav_by_date_range(start_date, end_date, test_fund_code)
        if date_range_data.get('success'):
            print(f"查询成功，日期范围 {start_date} 到 {end_date}，共{len(date_range_data['data'])}条记录")
            if date_range_data['data']:
                print("  最新记录:")
                latest = date_range_data['data'][0]
                print(f"    日期: {latest['nav_date']}")
                print(f"    单位净值: {latest['unit_nav']}")
                print(f"    累计净值: {latest['accumulated_nav']}")
        else:
            print(f"查询失败: {date_range_data.get('error')}")
        print()
    
    # 7. 分页查询示例
    print("7. 分页查询示例（第1页，每页3条）...")
    page_data = api.get_fund_nav_history(page=1, page_size=3, order_by='nav_date', order_direction='DESC')
    if page_data.get('success'):
        print(f"查询成功，总记录数: {page_data['total']}, 当前页: {page_data['page']}/{page_data['total_pages']}")
        for i, record in enumerate(page_data['data'], 1):
            print(f"  {i}. {record['fund_code']} - {record['nav_date']} - {record['unit_nav']}")
    else:
        print(f"查询失败: {page_data.get('error')}")
    print()
    
    # 8. 错误处理示例
    print("8. 错误处理示例...")
    # 测试无效的基金代码
    invalid_result = api.get_fund_nav_by_code("invalid_code")
    print(f"无效基金代码查询结果: success={invalid_result.get('success')}, error={invalid_result.get('error')}")
    
    # 测试无效的日期格式
    invalid_date_result = api.get_fund_nav_by_date_range("2023-13-01", "2023-12-31")
    print(f"无效日期格式查询结果: success={invalid_date_result.get('success')}, error={invalid_date_result.get('error')}")
    print()
    
    print("=== API使用示例完成 ===")


if __name__ == '__main__':
    main()